<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
  // 怎么生成一个基本包装类型的包装对象呢?
  // var str = "中国";
  // 可以通过 new String 生成包装对象
  // const obj = new String(str);// 包装对象
  // 可以通过 new Object 生成包装对象
  // const obj = new Object(str);
  // console.log(str);
  // console.log(obj);

  // console.log(new Number(1));
  // console.log(new Object(1));


  // 基本包装类型不是对象，为什么会有属性呢?
  // 答：基本包装类型所对应的属性或方法全部来自于对应包装对象下的实例属性或原型属性。
  // var str = "我爱你中国，我亲爱的母亲，我为你流泪，也为你自豪！";
  // console.log(str.length);// 25
  // 隐式：
  // var _str = new String(str);
  // console.log(_str.length);
  // _str = null;// 清空


  // console.log(str.charAt(0));// 我
  // var _str = new String(str);
  // console.log(_str.charAt(0));
  // _str = null;


  // 引用类型和基本包装类型的区别？
  // 答：两者的生命周期不同。引用类型的数据会保存至内存中。基本包装类型只是存在一瞬间。
  // 引用类型：
  // var obj = {
  //     a:1,
  //     b:2
  // }
  // obj.userName = "zhangsan";
  // console.log(obj);

  // 基本包装类型：
  // var a = "1";
  // a.userName = "zhangsan";
  // // 隐式：
  // var _a = new String(a);
  // _a.userName = "zhangsan";
  // _a =null;
  //
  //
  // console.log(a.userName);// undefined
  // // 隐式：
  // var _a = new String(a);
  // console.log(_a.userName);// undefined
  // _a = null;






  // * 如何给基本类型添加方法或者属性呢？
  // 答：为其对应的包装String,Number,布尔原型增加属性或方法。
  // 增加属性：
  // String.prototype.userName = "zhangsan";
  // var str = "中国";
  // console.log(str.userName);// zhangsan

  // var _str = new String(str);
  // console.log(_str,_str.userName);
  // _str = null;


  // 增加方法
  // String.prototype.last = function(){
  //     return this.charAt(this.length-1);
  // }
  // var str = "我是一只小小小小鸟，怎么飞也飞不高!";
  // console.log(str.last());// !
  // // 隐式：
  // const _str = new String(str);
  // _str.last();// !


  // “ == ” 运算符将原始值和其包装对象视为相等，“ === ”全等运算符则视为不等。
  // var a = "中国";
  // var a1 = new String(a);
  // console.log(a == a1);// true
  // console.log(a === a1);// false


  // 定义一个变量，值为 中国,变量名字为 a
  var a = "中国";
  // 不建议
  var a = new String("中国");



</script>
</html>